home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2006 May / PCWMAY06.iso / Software / Freeware / First Page 2006 3.00 / fp2006-final-3.00-setup.exe / {app} / Iscripts / Xtras / poker.js < prev    next >
Text File  |  2005-07-17  |  11KB  |  318 lines

  1. // SOLITAIRE POKER V-2.0
  2. // By: Brian Gosselin of http://scriptasylum.com
  3. // Note: This script does NOT work in Netscape 4.x.
  4.  
  5. var beginMoney=200; // BEGINNING AMOUNT OF MONEY.
  6. var cardWidth=40;   // CARD WIDTH IN PIXELS, THE CARD HEIGHT WILL BE 2X THIS VALUE.
  7. var cardBGC="#0066AE";  // BACKGROUND COLOR OF CARD WHEN "FLIPPED" TO HIDE THE CARD.
  8.  
  9. // USE THE ARRAY BELOW TO CHANGE THE BET MULTIPIERS IF DESIRED.
  10. var multipliers=[1,2,3,7,10,15,20,30,60];
  11.  
  12. // THE POSITIONS OF THE NUMBERS ABOVE CORRESPOND TO THE POSITIONS OF THE WIN TYPE IN THE LIST BELOW.
  13. // [ ONE PAIR , TWO PAIR , THREE PAIR , STRAIGHT , FLUSH , FULL HOUSE , FOUR OF A KIND , STRAIGHT FLUSH , ROYAL STRIGHT FLUSH ]
  14.  
  15.  
  16. //********** DO NOT EDIT BEYOND THIS POINT **********\\
  17.  
  18. var w3c=(document.getElementById)?true:false;
  19. var ns4=(document.layers)?true:false;
  20. var ie4=(document.all && !w3c)?true:false;
  21. var ie5=(document.all && w3c)?true:false;
  22. var ns6=(w3c && navigator.appName.indexOf("Netscape")>=0)?true:false;
  23. var suits=[0,'♣','♠','♥','♦'];
  24. var nums=['A','2','3','4','5','6','7','8','9','10','J','Q','K','A'];
  25. var cNum=[0,0,0,0,0,0];
  26. var cSuit=[0,0,0,0,0,0];
  27. var deck=new Array();
  28. var replaceBusy=true;
  29. var buttonBusy=false;
  30. var isBegin=true;
  31. var toRepl=[0,1,1,1,1,1];
  32. var bet=Math.floor(beginMoney/4);
  33. var pot, stats, button, cards;
  34. var money=beginMoney;
  35. var tmpn;
  36. var cards=new Array();
  37. var arrows=new Array();
  38. var textStyle="font-family:verdana; font-size:8pt; color:black";
  39.  
  40. // BUILD AND SHUFFLE THE DECK.
  41. function buildShuffle(){
  42. for(i=1;i<6;i++){
  43. cards[i].innerHTML="";
  44. cards[i].style.backgroundColor=cardBGC;
  45. arrows[i].innerHTML="";
  46. arrows[i].on=false;
  47. }
  48. isBegin=true;
  49. var x,y,xd,yd;
  50. var A=new Array();
  51. for(s=1;s<=4;s++){
  52. for(c=1;c<=13;c++)A[s*13-13+c]=[s,c];
  53. }
  54. for(i=0;i<=300;i++){
  55. x=Math.floor(Math.random()*52+1);
  56. xd=A[x];
  57. y=Math.floor(Math.random()*52+1);
  58. yd=A[y];
  59. A[y]=xd;
  60. A[x]=yd;
  61. }
  62. deck=A;
  63. replaceBusy=true;
  64. buttonBusy=true;
  65. replaceCards();
  66. }
  67.  
  68. // TOGGLES THE CHECKBOX UNDER THE CARD WHEN CLICKED.
  69. function changeCard(n){
  70. if(!replaceBusy){
  71. arrows[n].on=!arrows[n].on;
  72. arrows[n].innerHTML=(arrows[n].on)?"Δ":" ";
  73. }}
  74.  
  75. // REPLACES THE CARDS CHECKED.
  76. function replaceCards(){
  77. for(i=1;i<6;i++){
  78. if(arrows[i].on || isBegin)toRepl[i]=1;
  79. }
  80. revert(1);
  81. }
  82.  
  83. // RETRIEVES AND ERROR CHECKS THE BET INPUT PROMPT.
  84. function getBet(bs){
  85. bet=parseInt(prompt(bs+'Enter Bet amount in dollars. You currently have $'+money+'.',Math.min(money,bet)));
  86. if(isNaN(bet)){
  87. bet=1;
  88. getBet('Incorrect value or "Cancel" not allowed; use numbers only.\n');
  89. }
  90. else if(bet>money)getBet('Your bet of $'+bet+' was too high.\n');
  91. else if(bet<1)getBet('Your bet of $'+bet+' was too low. The bet must be at least $1.\n');
  92. else updatePot();
  93. }
  94.  
  95. function updatePot(n){
  96. pot.innerHTML='Wallet:<br><b>$'+money+'</b><br>Curr Bet:<br><b>$'+bet+'</b>';
  97. }
  98.  
  99. // REVERTS THE CARDS TO "FACE DOWN" BEFORE PUTTING NEW ONES UP.
  100. function revert(i){
  101. if(i<6){
  102. if(toRepl[i]==1){
  103. cards[i].innerHTML="";
  104. cards[i].style.backgroundColor=cardBGC;
  105. setTimeout('revert('+(i+1)+')',100);
  106. }else revert(i+1);
  107. }else{
  108. if(isBegin){
  109. //money=money-bet;
  110. stats.innerHTML='Click the card(s) you do not want<br>and click "Replace".';
  111. setTimeout('subReplace(1)',200);
  112. //getBet('');
  113. }
  114. else setTimeout('subReplace(1)',200);
  115. }}
  116.  
  117. //SUB-FUNCTION TO REPLACE THE CARDS TO ACHIEVE THE "FLIPPING" DELAY.
  118. function subReplace(i){
  119. if(i>5){
  120. if(isBegin){
  121. isBegin=false;
  122. buttonBusy=false;
  123. replaceBusy=false;
  124. }else testCards();
  125. }else{
  126. if(toRepl[i]==1){
  127. cSuit[i]=deck[deck.length-1][0];
  128. cNum[i]=deck[deck.length-1][1];
  129. cards[i].style.backgroundColor="white";
  130. var sts=deck[deck.length-1][0];
  131. cards[i].innerHTML='<span style="font-family:arial; font-size:'+(cardWidth-10)+'px; font-weight:bold; color:'+((sts==1||sts==2)?'black':'red')+'">'+nums[deck[deck.length-1][1]]+'</span><br><span style="font-family:arial; font-size:'+(cardWidth-2)+'px; color:'+((sts==1||sts==2)?'black':'red')+'">'+suits[sts]+'</span>';
  132. deck.length=deck.length-1;
  133. arrows[i].innerHTML="";
  134. arrows[i].on=false;
  135. toRepl[i]=0;
  136. setTimeout('subReplace('+(i+1)+')',200);
  137. }else subReplace(i+1);
  138. }}
  139.  
  140. // CHANGES THE BUTTON LOOK AND ACTION WHEN CLICKED.
  141. function testStatus(){
  142. if(!buttonBusy){
  143. buttonBusy=true;
  144. if(isBegin){
  145. replaceBusy=true;
  146. money=money-bet;
  147. updatePot();
  148. stats.innerHTML='';
  149. button.innerHTML="Replace Cards";
  150. buildShuffle();
  151. }else{
  152. replaceBusy=true;
  153. stats.innerHTML='';
  154. button.innerHTML="Deal";
  155. replaceCards();
  156. }}}
  157.  
  158. // CALLS THE FUNCTION TO TEST THE CARDS AND UPDATES MONEY, STATUS, ETC.
  159. function testCards(){
  160. isBegin=true;
  161. buttonBusy=true;
  162. replaceBusy=true;
  163. var txt=testCombos();
  164. updatePot();
  165. if(money>0){
  166. if(bet>money)getBet('You do not have enough money to cover your bet of $'+bet+'.\n');
  167. button.innerHTML="Deal";
  168. stats.innerHTML='You got '+txt+'.<br>Click "Deal" to start.';
  169. }else{
  170. isBegin=true;
  171. money=beginMoney;
  172. bet=Math.floor(money/4);
  173. button.innerHTML="New Game";
  174. stats.innerHTML='You got Nothing.<br>No money left to bet.<br><br> <b>** Game Over **</b>';
  175. }
  176. buttonBusy=false;
  177. }
  178.  
  179. // GET ELEMENT REFERENCES
  180. function getEl(s){
  181. return (ie4)?document.all[s]:document.getElementById(s);
  182. }
  183.  
  184. // TESTS THE FOR "FLUSH" CONDITION ON A SORTED DECK.
  185. function testflush(){
  186. return ( (cSuit[1]==cSuit[2])&&(cSuit[1]==cSuit[3])&&(cSuit[1]==cSuit[4])&&(cSuit[1]==cSuit[5]) );
  187. }
  188.  
  189. // TESTS FOR "ROYAL STRAIGHT" CONDITION ON A SORTED DECK (USED WITH THE testflush() FUNCTION).
  190. function testface(){
  191. return ( ((cNum[1]>=10)||(cNum[1]==1))&&((cNum[2]>=10)||(cNum[2]==1))&&((cNum[3]>=10)||(cNum[3]==1))&&((cNum[4]>=10)||(cNum[4]==1))&&((cNum[5]>=10)||(cNum[5]==1)) )
  192. }
  193.  
  194. // TESTS FOR "STRAIGHT" CONDITION ON A SORTED DECK.
  195. function teststraight(){
  196. var x=( (tmpn[1]+4==tmpn[5]) && (tmpn[2]+3==tmpn[5]) && (tmpn[3]+2==tmpn[5]) && (tmpn[4]+1==tmpn[5]) );
  197. for(i=1;i<=5;i++){
  198. if(tmpn[i]==1)tmpn[i]=14;
  199. }
  200. tmpn=new Array();
  201. tmpn[0]=0;
  202. for(i=1;i<=5;i++)tmpn[i]=cNum[i];
  203. tmpn.sort(sortnumbs);
  204. var y=( (tmpn[1]+4==tmpn[5]) && (tmpn[2]+3==tmpn[5]) && (tmpn[3]+2==tmpn[5]) && (tmpn[4]+1==tmpn[5]) );
  205. return x||y;
  206. }
  207.  
  208. // SUB-FUNCTION FOR THE "SORT()" METHOD
  209. function sortnumbs(a,b){
  210. return a-b;
  211. }
  212.  
  213. // FUNCTION TO TEST ALL CARD POSSIBILITIES
  214. function testCombos(){
  215. tmpn=new Array();
  216. tmpn[0]=0;
  217. for(i=1;i<=5;i++)tmpn[i]=cNum[i];
  218. tmpn.sort(sortnumbs);
  219. var wtype='Nothing';
  220. var wamount=0;
  221. if( ((tmpn[1]==tmpn[2])&&(tmpn[1]>=10))||((tmpn[2]==tmpn[3])&&(tmpn[2]>=10))||((tmpn[3]==tmpn[4])&&(tmpn[3]>=10))||((tmpn[4]==tmpn[5])&&(tmpn[4]>=10)) ){
  222. wtype='a Pair';
  223. wamount=bet*multipliers[0];
  224. }
  225. if( ((tmpn[1]==tmpn[2])&&(tmpn[3]==tmpn[4]))||((tmpn[1]==tmpn[2])&&(tmpn[4]==tmpn[5]))||((tmpn[2]==tmpn[3])&&(tmpn[4]==tmpn[5])) ){
  226. wtype='Two Pair';
  227. wamount=bet*multipliers[1];
  228. }
  229. if( ((tmpn[1]==tmpn[2])&&(tmpn[1]==tmpn[3]))||((tmpn[2]==tmpn[3])&&(tmpn[2]==tmpn[4]))||((tmpn[3]==tmpn[4])&&(tmpn[3]==tmpn[5])) ){
  230. wtype='3 of a Kind';
  231. wamount=bet*multipliers[2];
  232. }
  233. if( teststraight() ){
  234. wtype='a Straight';
  235. wamount=bet*multipliers[3];
  236. }
  237. if( testflush() ){
  238. wtype='a Flush';
  239. wamount=bet*multipliers[4];
  240. }
  241. if( ((tmpn[1]==tmpn[2])&&(tmpn[3]==tmpn[4])&&(tmpn[3]==tmpn[5])&&(tmpn[1]!=tmpn[3]))||((tmpn[4]==tmpn[5])&&(tmpn[1]==tmpn[2])&&(tmpn[1]==tmpn[3])&&(tmpn[4]!=tmpn[1])) ){
  242. wtype='a Full House';
  243. wamount=bet*multipliers[5];
  244. }
  245. if( ((tmpn[1]==tmpn[2])&&(tmpn[1]==tmpn[3])&&(tmpn[1]==tmpn[4]))||((tmpn[2]==tmpn[3])&&(tmpn[2]==tmpn[4])&&(tmpn[2]==tmpn[5])) ){
  246. wtype='4 of a Kind';
  247. wamount=bet*multipliers[6];
  248. }
  249. // STRAIGHT FLUSH
  250. if(testflush() && teststraight()){
  251. wtype='a Straight Flush';
  252. wamount=bet*multipliers[7];
  253. }
  254. // ROYAL STRAIGHT FLUSH
  255. if(teststraight() && testface() && testflush()){
  256. wtype='a Royal Straight Flush';
  257. wamount=bet*multipliers[8];
  258. }
  259. money+=wamount;
  260. return wtype;
  261. }
  262.  
  263. // WRITES OUT THE GAME HTML
  264. function writePoker(){
  265. var t;
  266. if(ns4)t='This Poker game script does not work in Netscape 4.x browsers.';
  267. else{
  268. t='<table cellpadding="3" cellspacing="0" border="1" rules="none" bgcolor="white"><tr valign="top" align="left"><td>';
  269. t+='<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr height="55" valign="top">';
  270. t+='<td colspan=5 align="left">';
  271. t+='<div id="stats" style="font-family:verdana; font-size:8pt; color:black">Please wait while the<br>page loads...</div>';
  272. t+='</td><td colspan=2 align="left">';
  273. t+='<div id="pot" style="font-family:verdana; font-size:8pt; color:black; height:45px;">Wallet:<br><b>$'+money+'</b><br>Curr Bet:<br><b>$'+bet+'</b></div>';
  274. t+='</td>';
  275. t+='</tr><tr align="center" height="'+(cardWidth*2+30)+'">';
  276. t+='<td width="25"> </td>';
  277. for(i=1;i<6;i++)t+='<td width="'+(cardWidth+10)+'"><div id="c'+i+'" style="border-style:solid; border-width:black; border-width:1px; background-color:'+cardBGC+'; cursor:default; width:'+cardWidth+'px; height:'+(cardWidth*2)+'px; text-align:center;" onmousedown="changeCard('+i+')"></div></td>';
  278. t+='<td width="25"> </td>';
  279. t+='</tr><tr align="center">';
  280. t+='<td> </td>';
  281. for(i=1;i<6;i++)t+='<td><div id="b'+i+'" style="width:15px; height:25px; font-family:arial; font-size:18px; font-weight:bold; color:blue;"></div></td>';
  282. t+='<td> </td>';
  283. t+='</tr><tr align="center" height="40">';
  284. t+='<td colspan="4"><div id="button" style="width:150px; padding:3px; border-color:gray; border-style:outset; border-width:3px; background-color:lightgrey; color:black; font-family:verdana; font-size:9pt; font-weight:bold; color:black; cursor:default" onmousedown="testStatus()">Deal</div></td>';
  285. t+='<td colspan="3"><div style="width:90px; padding:3px; border-color:gray; border-style:outset; border-width:3px; background-color:lightgrey; color:black; font-family:verdana; font-size:9pt; font-weight:bold; color:black; cursor:default" onmousedown="if(isBegin&&replaceBusy&&!buttonBusy)getBet(\'\');">Change Bet</div></td>';
  286. t+='</tr></table></td><td>';
  287. t+='<table width="200" cellpadding="5" cellspacing="0" border="0">';
  288. t+='<tr><td align="center" colspan="2"><font size=2><b>Bet Multipliers</b></font></td></tr>';
  289. t+='<tr><td align="left"><font size=2>Royal Straight Flush</font></td><td align="right"><font size=2>x '+multipliers[8]+'</font></td></tr>';
  290. t+='<tr><td align="left"><font size=2>Straight Flush</font></td><td align="right"><font size=2>x '+multipliers[7]+'</font></td></tr>';
  291. t+='<tr><td align="left"><font size=2>Four of a Kind</font></td><td align="right"><font size=2>x '+multipliers[6]+'</font></td></tr>';
  292. t+='<tr><td align="left"><font size=2>Full House</font></td><td align="right"><font size=2>x '+multipliers[5]+'</font></td></tr>';
  293. t+='<tr><td align="left"><font size=2>Flush</font></td><td align="right"><font size=2>x '+multipliers[4]+'</font></td></tr>';
  294. t+='<tr><td align="left"><font size=2>Straight</font></td><td align="right"><font size=2>x '+multipliers[3]+'</font></td></tr>';
  295. t+='<tr><td align="left"><font size=2>Three of a Kind</font></td><td align="right"><font size=2>x '+multipliers[2]+'</font></td></tr>';
  296. t+='<tr><td align="left"><font size=2>Two Pair</font></td><td align="right"><font size=2>x '+multipliers[1]+'</font></td></tr>';
  297. t+='<tr><td align="left"><font size=2>One Pair (J or better)</font></td><td align="right"><font size=2>x '+multipliers[0]+'</font></td></tr>';
  298. t+='</table>';
  299. t+='</td></tr></table>';
  300. }
  301. document.write(t);
  302. }
  303. writePoker();
  304.  
  305. // INITIALIZES ON GAMELOAD
  306. window.onload=function(){
  307. if(!ns4){
  308. pot=getEl('pot');
  309. stats=getEl('stats');
  310. button=getEl('button');
  311. for(i=1;i<6;i++)cards[i]=getEl('c'+i);
  312. for(i=1;i<6;i++){
  313. arrows[i]=getEl('b'+i);
  314. arrows[i].on=false;
  315. }
  316. stats.innerHTML='Click "Deal" to start.';
  317. }}
  318.